from commons.entity.po.schedule import Schedule
from travel_service.travel.mappers.schedule_mapper import ScheduleMapper


class ScheduleService:
    def __init__(self):
        self.schedule_mapper = ScheduleMapper()

    def find_list_by_param(self, schedule_query=None):
        """
        业务逻辑：根据多个参数查询行程列表。
        :param schedule_query: ScheduleQuery 实例，包含查询过滤条件。
        :return: 包含行程信息字典的列表。
        """
        print("ScheduleService find_list_by_param")
        print(schedule_query)

        return self.schedule_mapper.select_list(Schedule, schedule_query)

    def find_count_by_param(self, schedule_query=None):
        """
        业务逻辑：根据多个参数统计行程数量。
        :param schedule_query: ScheduleQuery 实例，包含查询过滤条件。
        :return: 符合条件的行程数量。
        """
        print("ScheduleService find_count_by_param")
        print(schedule_query)

        return self.schedule_mapper.select_count(Schedule, schedule_query)

    def get_schedule_by_schedule_id(self, schedule_id):
        """
        业务逻辑：获取行程信息
        :param schedule_id: str
        :return: 行程信息字典或 None
        """
        print("ScheduleService get_schedule_by_id ")
        print(schedule_id)

        return self.schedule_mapper.select_by_schedule_id(schedule_id)

    def add(self, schedule_bean):
        """
        业务逻辑：添加一个新的行程。
        :param schedule_bean: Schedule 类实例，包含行程信息。
        :return: 插入操作是否成功（True/False）。
        """
        print("ScheduleService add schedule")
        print(schedule_bean)

        return self.schedule_mapper.insert(schedule_bean)

    def add_batch(self, schedule_list_bean):
        """
        业务逻辑：批量添加行程。
        :param schedule_list_bean: 包含多个 Schedule 类实例的列表，包含需要插入的行程信息。
        :return: 插入操作成功的行程数量。
        """
        print("ScheduleService add_batch schedules")
        print(schedule_list_bean)

        if not schedule_list_bean:
            print("No schedules to add. The input list is either null or empty.")
            return 0

        return self.schedule_mapper.insert_batch(schedule_list_bean)

    def add_or_update_batch(self, schedule_list_bean):
        """
        业务逻辑：批量插入或更新行程信息。
        :param schedule_list_bean: 包含多个 Schedule 类实例的列表，包含需要插入或更新的行程信息。
        :return: 插入或更新成功的行程数量。
        """
        print("ScheduleService add_or_update_batch schedules")
        print(schedule_list_bean)

        if not schedule_list_bean:
            print("No schedules to add. The input list is either null or empty.")
            return 0

        return self.schedule_mapper.insert_or_update_batch(Schedule, schedule_list_bean)

    def update_by_param(self, schedule_bean, schedule_query):
        """
        业务逻辑：根据多个条件更新行程信息。
        :param schedule_bean: Schedule 类实例或字典，包含需要更新的字段及其新值。
        :param schedule_query: ScheduleQuery 类实例或字典，包含用于定位记录的过滤条件。
        :return: 更新成功的数量。
        """
        print("ScheduleService update_by_param")
        print(schedule_bean)
        print(schedule_query)

        return self.schedule_mapper.update_by_params(Schedule, schedule_bean, schedule_query)

    def delete_by_param(self, schedule_query):
        """
        业务逻辑：根据多个条件删除行程信息。
        :param schedule_query: ScheduleQuery 类实例或字典，包含用于定位记录的过滤条件。
        :return: 删除成功的数量。
        """
        print("ScheduleService delete_by_param")
        print(schedule_query)

        return self.schedule_mapper.delete_by_param(Schedule, schedule_query)

    def update_schedule_by_schedule_id(self, schedule_bean, schedule_id):
        """
        业务逻辑：根据 schedule_id 更新行程信息
        :param schedule_id: str
        :param schedule_bean: Schedule 类实例，包含需要更新的行程属性
        :return: 更新成功信息或错误信息
        """
        print("ScheduleService update_schedule_by_id ")
        print(f"schedule_id: {schedule_id}, schedule_bean: {schedule_bean}")

        return self.schedule_mapper.update_by_schedule_id(schedule_bean, schedule_id)

    def delete_schedule_by_schedule_id(self, schedule_id):
        """
        业务逻辑：根据 schedule_id 删除行程
        :param schedule_id: str
        :return: 删除成功或错误
        """
        print("ScheduleService delete_schedule_by_id ")
        print(schedule_id)

        return self.schedule_mapper.delete_by_schedule_id(schedule_id)

    def get_schedule_by_travel_id(self, travel_id):
        """
        业务逻辑：获取行程信息
        :param travel_id: str
        :return: 行程信息字典或 None
        """
        print("ScheduleService get_schedule_by_id ")
        print(travel_id)

        return self.schedule_mapper.select_by_travel_id(travel_id)